const { contextBridge, ipcRenderer } = require('electron');

// 使用 contextBridge 将 Electron 的 API 安全地暴露给渲染进程
contextBridge.exposeInMainWorld('electronAPI', {
  /**
   * 请求主进程打开一个新的机器窗口
   * @param {string} machineId - 机器的唯一标识符
   * @returns {Promise<string>} - 主进程返回的确认消息
   */
  openMachineWindow: (machineId) => ipcRenderer.invoke('open-machine-window', machineId),

  /**
   * 发送点对点消息到特定窗口
   * @param {string} targetWindow - 目标窗口 ('main' 或 'machine', 'machine2', etc.)
   * @param {object} data - 消息数据
   * @returns {Promise<object>} - 发送结果
   */
  sendDirectMessage: async (targetWindow, data) => {
    const messageId = Date.now() + Math.random();
    
    try {
      const result = await ipcRenderer.invoke('send-direct-message', {
        targetWindow,
        data: {
          ...data,
          messageId,
          timestamp: new Date().toISOString()
        }
      });
      
      return {
        success: true,
        messageId,
        targetWindow,
        result
      };
    } catch (error) {
      return {
        success: false,
        messageId,
        targetWindow,
        error: error.message
      };
    }
  },

  /**
   * 监听点对点消息
   * @param {Function} callback - 接收消息的回调函数
   */
  onDirectMessage: (callback) => {
    ipcRenderer.on('direct-message-received', callback);
  },

  /**
   * 获取当前窗口的连接状态
   * @returns {Promise<object>} - 窗口连接状态信息
   */
  getConnectionStatus: () => ipcRenderer.invoke('get-connection-status'),

  /**
   * 获取应用状态
   * @returns {Promise<object>} - 应用状态数据
   */
  getAppState: () => ipcRenderer.invoke('get-app-state'),

  /**
   * 交换窗口位置
   * @returns {Promise<object>} - 交换结果
   */
  swapWindows: () => ipcRenderer.invoke('swap-windows'),

  /**
   * 监听窗口最大化状态变化
   * @param {Function} callback - 接收最大化状态的回调函数
   */
  onMaximizeChange: (callback) => {
    ipcRenderer.on('window-maximize', () => callback(true));
    ipcRenderer.on('window-unmaximize', () => callback(false));
  }
});
